//
//  ViewController.m
//  UI25-多线程
//
//  Created by 韩旭 on 16/8/17.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *DF;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //  iOS下的线程  NSThread
    //    1。 进程和线成
    //    什么是进程? 进程当用户下达执行应用程序的命令时，所启动的东西。
    //    什么是线程？ 线程是进程的执行单位，线程比喻工人，进程比作工厂
    //    2. 多线程
    //    为了更好的进行一些程序的操作，节省时间，提高效率。
    //    一个进程不能过多的创建线程， 资源消耗太大（工厂能有太多的工人，工资发不起） 开辟5个左右的线程。
    //    注意：所有UI的操作，都放在主线程中进行。
    //    需要开辟线程的耗时操作， 图像文字渲染，大数据存储。网络请求等。
    
    //    3. NSThread
    //  1>currentThread 获取当前线程
    NSThread *thread = [NSThread currentThread];
    //    获取到当前线程<NSThread: 0x7fad10603a40>{number = 1, name = main}
    //    name 线程名
    //    number 线程编号
    //    main 代表主线程
    NSLog(@"%@", thread);
    //    2> 开辟个子线程
    //    子线程随机创建
    [NSThread detachNewThreadSelector:@selector(detachNewThread) toTarget:self withObject:nil];
    //    3> 延迟当前的线程执行， 固定日期
    //    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
    //    [NSThread sleepUntilDate:date];
    //    4.> 相对时间
    //    [NSThread sleepForTimeInterval:1];
    NSLog(@"1111");
    //    5.> exit 退出当前线程, 不要退出主线程
    //    退出后线程后续操作不会再执行
    
    //    [NSThread exit];
    //    6.> priority 线程的优先级
    //    默认线程有先级都为0.5
    double priority = [NSThread threadPriority];
    NSLog(@"%lf", priority);
//    7>
    thread.name = @"xxx的线程";
    NSLog(@"%@", [NSThread mainThread]);
//    8>isMainThread 判断是否是主线程
//    判断当前线程是不是主线程
    [NSThread isMainThread];
//    判断线程对像是不是主线程
    [[NSThread mainThread] isMainThread];
//    9.> 初始化方法
//    初始化一个未启动的线程
//    需要手动管理线程

   NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread1) object:nil];
    [newThread start];
//  10.>将耗时操作放到后台 练习2
//    不需要关心线程
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://gaoxiao.jokeji.cn/UpFilesnew/2012/7/12/201271225150721.jpg"]];
    _DF.image = [UIImage imageWithData:data];
    _DF.backgroundColor = [UIColor greenColor];
    [self performSelectorInBackground:@selector(newThread1) withObject:nil];
//    11、> performSelectorOnMainThread 返回主线程操作
}
- (void)newThread1 {
//  NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://gaoxiao.jokeji.cn/UpFilesnew/2012/7/12/201271225150721.jpg"]];
//    _DF.image = [UIImage imageWithData:data];
//    _DF.backgroundColor = [UIColor greenColor];
//    NSLog(@"fsdfsdfsdf%@", [NSThread currentThread]);
//    返回主线程显示图片
    for (int i = 0; i < 1000000; i ++) {
        NSLog(@"%d", i);
    }
//    [self performSelectorOnMainThread:@selector(onMainThread:) withObject:data waitUntilDone:YES];
    NSLog(@"%s", __func__);
}
- (void)onMainThread:(id)object {
    _DF.image = [UIImage imageWithData:object];
}


- (void)detachNewThread {
    NSThread *thread = [NSThread currentThread];
//    7.>name线程名
    thread.name = @"王道林的线程";
    double priority = [NSThread threadPriority];
    NSLog(@"new:%@ --- %lf", thread, priority);
}
- (IBAction)点击循环:(id)sender {
    for (int i = 0; i < 10; i++) {
        NSLog(@"循环了%d次 。", i);
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end